home *** CD-ROM | disk | FTP | other *** search
- /*
- * inetdconf.c - configure inetd
- *
- * Copyright (C) 1994 Tomoaki Tada/F.C.T.
- */
-
- static char *rcsid = "$Id: inetdconf.c,v 1.5 1994/10/02 07:57:36 Niggle Exp $";
-
- /*
- * $Log: inetdconf.c,v $
- * Revision 1.5 1994/10/02 07:57:36 Niggle
- * ripɺîΣé≡Æ╟ë┴
- * æσò¥é╔Åæè╖éª
- *
- * Revision 1.4 1994/08/04 05:02:08 Niggle
- * inetdé¬ÅφÆôé╡é─éóé╚éóÅΩìçé╠ò\Īé≡ò╧ìX
- * routeâIâvâVâçâôé≡routeré╔ò╧ìX
- *
- * Revision 1.3 1994/07/26 10:03:03 Niggle
- * domain é¬ uninitilizeé╛é┴é╜é╠é≡ÅCÉ│
- *
- * Revision 1.2 1994/07/25 10:57:16 Niggle
- * domain name é╠É▌ÆΦé╠Æ╟ë┴
- * usageé╠ò\Ī
- * bug fixes
- *
- * Revision 1.1 1994/07/19 03:30:14 Niggle
- * Initial revision
- *
- */
-
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
-
- #include"network.h"
- #include"socket.h"
-
- static int add_default_route (long);
- static void print_current (void);
- static void print_usage (void);
- static char *ipaddr2host (long);
-
- static int set_router (int *, int, char **);
- static int set_rip (int *, int, char **);
- static int set_domain (int *, int, char **);
- static int set_dns (int *, int, char **);
-
- struct cmd {
- unsigned char *str;
- int (*func) (int *, int, char **);
- };
-
- #define NCMDS (4)
- struct cmd cmds[NCMDS] = {
- {"router", set_router},
- {"rip", set_rip},
- {"domain", set_domain},
- {"dns", set_dns},
- };
-
- char *my_name;
-
- /************************************************
- * *
- ************************************************/
- int
- main (int argc, char **argv)
- {
- int i, ii, result = -1;
-
- my_name = argv[0];
- if (_get_version () == -1)
- {
- fprintf (stderr, "TCP/IP driveré═ÅφÆôé╡é─éóé▄é╣é±\n");
- return 1;
- }
-
- if (argc < 2)
- {
- print_current ();
- return 0;
- }
-
- for (i = 1; i < argc; i++)
- {
- for (ii = 0; ii < NCMDS; ii++)
- {
- if (!strcmp (cmds[ii].str, argv[i] + 1))
- {
- result = cmds[ii].func (&i, argc, argv);
- break;
- }
- }
- if (ii >= NCMDS)
- {
- result = -1;
- break;
- }
- if (result)
- break;
- }
-
- if (result < 0)
- {
- print_usage ();
- fprintf (stderr, "%s: Illeagal option: %s\n", my_name, argv[i]);
- }
- return result;
- }
-
- /************************************************
- * *
- ************************************************/
- static int
- set_router (int *i, int argc, char **argv)
- {
- char *p = argv[*i];
- int c = *p;
- long router;
-
- if (c != '-' && c != '+')
- return -1;
- if (c == '-')
- {
- rt_drop (0, 0);
- (*i)++;
- return 0;
- }
-
- p = argv[++(*i)];
- if (*i >= argc)
- {
- fprintf (stderr, "%s: %s: requires router\n", my_name, argv[*i - 1]);
- return 1;
- }
-
- if (isipaddr (p))
- router = a2n_ipaddr (p);
- else
- {
- struct hostent *h;
- h = gethostbyname (p);
- if (h)
- router = *(long *)h->h_addr;
- else
- router = 0;
- }
- if (router)
- return add_default_route (router);
-
- fprintf (stderr, "%s: Host name lookup failure: %s\n", my_name, p);
- return 1;
- }
-
- /************************************************
- * *
- ************************************************/
- static int
- set_dns (int *ii, int argc, char **argv)
- {
- int i, plus, c = *argv[*ii];
- long dns;
- int added;
-
- if (c != '-' && c != '+')
- return -1;
- if (c == '-')
- plus = 0;
- else
- plus = 1;
-
- added = 0;
- for (i = *ii + 1; i < argc; i++)
- {
- char *p = argv[i];
- c = *p;
-
- if (c == '-' || c == '+')
- {
- i--;
- break;
- }
-
- if (isipaddr (p))
- dns = a2n_ipaddr (p);
- else
- {
- struct hostent *h;
- h = gethostbyname (p);
- if (h)
- dns = *(long *)h->h_addr;
- else
- dns = 0;
- }
-
- if (!dns)
- {
- fprintf (stderr, "%s: Host name look up failure: %s\n", my_name, p);
- break;
- }
-
- added++;
- if (plus)
- dns_add (dns);
- else
- dns_drop (dns);
- }
-
- *ii = i;
- return 0;
- }
-
- /************************************************
- * *
- ************************************************/
- static int
- set_domain (int *ii, int argc, char **argv)
- {
- int i = *ii;
- char *p = argv[i];
-
- if (*p == '-')
- {
- set_domain_name ("");
- return 0;
- }
- else if (*p != '+')
- return -1;
-
- if (++i >= argc)
- {
- fprintf (stderr, "%s: %s: requires domain name\n", my_name, argv[i - 1]);
- return 1;
- }
- *ii = i;
- p = argv[i];
- if (strlen (p) > 63)
- {
- fprintf (stderr, "%s: Too long domain name: %s\n", p);
- return 1;
- }
- else
- set_domain_name (p);
- return 0;
- }
-
- /************************************************
- * *
- ************************************************/
- static int
- set_rip (int *ii, int _argc, char **argv)
- {
- int c = *argv[*ii];
-
- if (c == '-')
- rip_set (RIP_OFF);
- else if (c == '+')
- rip_set (RIP_ON);
- else
- return -1;
-
- return 0;
- }
-
- /************************************************
- * *
- ************************************************/
- static void
- print_current (void)
- {
-
- /* print default router */
- {
- route *def;
-
- def = NULL;
- rt_top (&def);
- if (def && def->iface)
- printf ("default router:\t\t%s\n", ipaddr2host (def->gateway));
- else
- printf ("default router:\t\tNone\n");
- }
-
- printf ("rip :\t\t%s\n", (rip_set (RIP_STAT) ? "On" : "Off"));
-
- /* print dns */
- {
- struct dns *cur;
-
- printf ("domain name servers:\t");
- cur = dns_get ();
- if (cur)
- {
- for (; cur != NULL; cur = cur->next)
- printf ("%s ", ipaddr2host (cur->address));
- printf ("\n");
- }
- else
- printf ("None\n");
- }
-
- {
- char *dname;
-
- dname = get_domain_name ();
- if (dname && *dname)
- printf ("domain name:\t\t%s\n", dname);
- else
- printf ("domain name:\t\tNone\n");
- }
- return;
- }
-
- /************************************************
- * *
- ************************************************/
- static int
- add_default_route (long target)
- {
- route *rt;
-
- rt = rt_lookup (target);
- if (!rt)
- {
- char buff[32];
-
- n2a_ipaddr (target, buff);
- fprintf (stderr, "%s: No route for %s.\n", my_name, buff);
- return 1;
- }
-
- rt_add (0, 0, target, rt->iface, 16, 0, 1);
- return 0;
- }
-
- /************************************************
- * *
- ************************************************/
- static void
- print_usage (void)
- {
- fprintf (stderr, "%s version 1.01 Copyright (C) 1994 FirstClassTechnology.\n", my_name);
- fprintf (stderr, "usage: %s [+route default-router] [-route] [+rip] [-rip]\n", my_name);
- fprintf (stderr, " [+dns domain-name-server] [-dns domain-name-server]\n");
- fprintf (stderr, " [+domain domain-name] [-dns]\n");
-
- }
-
- /************************************************
- * *
- ************************************************/
- static char *
- ipaddr2host (long target)
- {
- static char buff[64];
- struct hostent *h;
-
- h = gethostbyaddr ((char *)&target, sizeof (long), AF_INET);
- if (!h)
- return n2a_ipaddr (target, buff);
- else
- return strcpy (buff, h->h_name);
- }
-